//@author A0080917B

#include "stdafx.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

using namespace std;

namespace AddClassTest
{		
	TEST_CLASS(AddUnitTests)
	{
	public:
		
		TEST_METHOD(AddAttributeTimedWithEndDateWithoutLocation)
		{
			string input = ".d testing adding of timed task without location .s 27/04/14 2100 .e 27/04/14 2200";
			string expected =	"Added EVENT:\nDescription:\t testing adding of timed task without location\nStart date-time: Sun, 27 Apr 2014, 09:00PM\nEnd date-time:\t Sun, 27 Apr 2014, 10:00PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed task without location\t27/04/14 2100\t27/04/14 2200\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeTimedWithoutEndDateWithLocation)
		{
			string input = ".d testing adding of timed task with location .s 27/04/14 2100 .e 2200 .l Mac VMware Fusion Windows 8 parallel virtual image";
			string expected = "Added EVENT:\nDescription:\t testing adding of timed task with location\nStart date-time: Sun, 27 Apr 2014, 09:00PM\nEnd date-time:\t Sun, 27 Apr 2014, 10:00PM\nLocation:\t Mac VMware Fusion Windows 8 parallel virtual image\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed task with location\t27/04/14 2100\t27/04/14 2200\tMac VMware Fusion Windows 8 parallel virtual image", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributePartialTimedWithoutLocation)
		{
			string input = ".d testing adding of partial-timed task without location .s 08/08/18 1848";
			string expected = "Added EVENT:\nDescription:\t testing adding of partial-timed task without location\nStart date-time: Wed, 08 Aug 2018, 06:48PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[P]\ttesting adding of partial-timed task without location\t08/08/18 1848\t-\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributePartialTimedWithLocation)
		{
			string input = ".d testing adding of partial-timed task with location .s 01/04/14 1000 .l April Fools' place!:D";
			string expected = "Added EVENT:\nDescription:\t testing adding of partial-timed task with location\nStart date-time: Tue, 01 Apr 2014, 10:00AM\nLocation:\t April Fools' place!:D\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[P]\ttesting adding of partial-timed task with location\t01/04/14 1000\t-\tApril Fools' place!:D", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeDeadlineWithoutLocation)
		{
			string input = ".d testing adding of deadline without location .e 03/03/13 1333";
			string expected = "Added DEADLINE:\nDescription:\t testing adding of deadline without location\nDeadline:\t Sun, 03 Mar 2013, 01:33PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[D]\ttesting adding of deadline without location\t-\t03/03/13 1333\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeDeadlineWithLocation)
		{
			string input = ".d testing adding of deadline with location .e 06/06/16 1646 .l wherever I am gonna be(most likely just graduated and working at NatSteel!)";
			string expected = "Added DEADLINE:\nDescription:\t testing adding of deadline with location\nDeadline:\t Mon, 06 Jun 2016, 04:46PM\nLocation:\t wherever I am gonna be(most likely just graduated and working\n                 at NatSteel!)\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[D]\ttesting adding of deadline with location\t-\t06/06/16 1646\twherever I am gonna be(most likely just graduated and working at NatSteel!)", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeFloatingWithoutLocation)
		{
			string input = ".d testing adding of floating task without location";
			string expected = "Added TO-DO:\nDescription:\t testing adding of floating task without location\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[F]\ttesting adding of floating task without location\t-\t-\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeFloatingWithLocation)
		{
			string input = ".d testing adding of floating task with location .l my dreams!!";
			string expected = "Added TO-DO:\nDescription:\t testing adding of floating task with location\nLocation:\t my dreams!!\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[F]\ttesting adding of floating task with location\t-\t-\tmy dreams!!", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingCommandParams)
		{
			string input = "";
			string expected = INPUTERROR_MISSINGADDPARAMS;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddRepeatAttributeKeywords)
		{
			string input = ".d testing adding with repeat keywords .s 14/02/14 1200 .s 14/02/14 1300 .e 15/02/14 1800";
			string expected = INPUTERROR_REPEATATTRIBUTEKEYWORDS;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingAttributeParamStart)
		{
			string input = ".e .d testing adding with missing attribute parameter .s 22/07/14 1200";
			string expected = INPUTERROR_MISSINGATTRIBUTEPARAM;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingAttributeParamMiddle)
		{
			string input = ".d testing adding with missing attribute parameter .e .s 22/07/14 1200";
			string expected = INPUTERROR_MISSINGATTRIBUTEPARAM;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingAttributeParamEnd)
		{
			string input = ".d testing adding with missing attribute parameter .s 22/07/14 1200 .e";
			string expected = INPUTERROR_MISSINGATTRIBUTEPARAM;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeStartLaterThanEndTime)
		{
			string input = ".d testing adding with start later than end time .s 14/02/14 1800 .e 14/02/14 1400";
			string expected = INPUTERROR_STARTLATERTHANENDTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingAttributeKeyword)
		{
			string input = "testing adding with missing attribute keyword .s 14/02/14 1200 .e 15/02/14 1800 .l tada!";
			string expected = INPUTERROR_MISSINGATTRIBUTEKEYWORD;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddAttributeMissingDescription)
		{
			string input = ".s 22/07/14 1200 .e 22/07/14 1300 .l NUS";
			string expected = INPUTERROR_MISSINGDESCRIPTION;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}
		
		TEST_METHOD(AddNaturalTimedOnFromToWithLocation)
		{
			string input = "testing adding of timed with 'on' 'from' and 'to' keywords with location on 27/04/14 from 2100 to 2200 in Mac VMware Fusion Windows 8 parallel virtual image";
			string expected = "Added EVENT:\nDescription:\t testing adding of timed with 'on' 'from' and 'to' keywords\n                 with location\nStart date-time: Sun, 27 Apr 2014, 09:00PM\nEnd date-time:\t Sun, 27 Apr 2014, 10:00PM\nLocation:\t Mac VMware Fusion Windows 8 parallel virtual image\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed with 'on' 'from' and 'to' keywords with location\t27/04/14 2100\t27/04/14 2200\tMac VMware Fusion Windows 8 parallel virtual image", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalTimedOnFromToWithoutLocation)
		{
			string input = "testing adding of timed with 'on' 'from' and 'to' keywords without location on 17/03/14 from 1200 to 1300";
			string expected = "Added EVENT:\nDescription:\t testing adding of timed with 'on' 'from' and 'to' keywords\n                 without location\nStart date-time: Mon, 17 Mar 2014, 12:00PM\nEnd date-time:\t Mon, 17 Mar 2014, 01:00PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed with 'on' 'from' and 'to' keywords without location\t17/03/14 1200\t17/03/14 1300\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalTimedFromToWithLocation)
		{
			string input = "testing adding of timed with 'from' and 'to' keywords with location from 25/03/14 0800 to 28/03/14 1800 in SCHOOL@@@!";
			string expected = "Added EVENT:\nDescription:\t testing adding of timed with 'from' and 'to' keywords with\n                 location\nStart date-time: Tue, 25 Mar 2014, 08:00AM\nEnd date-time:\t Fri, 28 Mar 2014, 06:00PM\nLocation:\t SCHOOL@@@!\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed with 'from' and 'to' keywords with location\t25/03/14 0800\t28/03/14 1800\tSCHOOL@@@!", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalTimedFromToWithoutLocation)
		{
			string input = "testing adding of timed with 'from' and 'to' keywords without location from 10/05/14 0000 to 11/05/14 2359";
			string expected = "Added EVENT:\nDescription:\t testing adding of timed with 'from' and 'to' keywords without\n                 location\nStart date-time: Sat, 10 May 2014, 12:00AM\nEnd date-time:\t Sun, 11 May 2014, 11:59PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[T]\ttesting adding of timed with 'from' and 'to' keywords without location\t10/05/14 0000\t11/05/14 2359\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalPartialTimedWithLocation)
		{
			string input = "testing adding of partial-timed with location on 01/04/14 1000 in April Fools' place!:D";
			string expected = "Added EVENT:\nDescription:\t testing adding of partial-timed with location\nStart date-time: Tue, 01 Apr 2014, 10:00AM\nLocation:\t April Fools' place!:D\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[P]\ttesting adding of partial-timed with location\t01/04/14 1000\t-\tApril Fools' place!:D", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalPartialTimedWithoutLocation)
		{
			string input = "testing adding of partial-timed without location on 08/08/18 1848";
			string expected = "Added EVENT:\nDescription:\t testing adding of partial-timed without location\nStart date-time: Wed, 08 Aug 2018, 06:48PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[P]\ttesting adding of partial-timed without location\t08/08/18 1848\t-\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalDeadlineWithLocation)
		{
			string input = "testing adding of deadline with location by 06/06/16 1646 in wherever I am gonna be(most likely just graduated and working at NatSteel!)";
			string expected = "Added DEADLINE:\nDescription:\t testing adding of deadline with location\nDeadline:\t Mon, 06 Jun 2016, 04:46PM\nLocation:\t wherever I am gonna be(most likely just graduated and working\n                 at NatSteel!)\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[D]\ttesting adding of deadline with location\t-\t06/06/16 1646\twherever I am gonna be(most likely just graduated and working at NatSteel!)", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalDeadlineWithoutLocation)
		{
			string input = "testing adding of deadline without location by 03/03/13 1333";
			string expected = "Added DEADLINE:\nDescription:\t testing adding of deadline without location\nDeadline:\t Sun, 03 Mar 2013, 01:33PM\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[D]\ttesting adding of deadline without location\t-\t03/03/13 1333\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalFloatingWithLocation)
		{
			string input = "testing adding of floating with location in my dreams!!";
			string expected = "Added TO-DO:\nDescription:\t testing adding of floating with location\nLocation:\t my dreams!!\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[F]\ttesting adding of floating with location\t-\t-\tmy dreams!!", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalFloatingWithoutLocation)
		{
			string input = "testing adding of floating without location";
			string expected = "Added TO-DO:\nDescription:\t testing adding of floating without location\n";
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)19, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());
			Assert::AreEqual((string)"[F]\ttesting adding of floating without location\t-\t-\t-", todoTaskVector[18].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddRepeatNaturalKeywords)
		{
			string input = "testing adding with repeat keywords on 14/02/14 from 1200 to 1300 on 15/02/14 1800";
			string expected = INPUTERROR_REPEATNATURALKEYWORDS;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddMissingNaturalParam)
		{
			string input = "testing adding with missing natural parameter on 22/07/14 from 1200 to";
			string expected = INPUTERROR_MISSINGNATURALPARAM;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddInvalidNaturalKeywordsCombinationOnFromBy)
		{
			string input = "testing adding with invalid keywords combination on 20/09/14 from 1200 by 1800";
			string expected = INPUTERROR_INVALIDNATURALKEYWORDSCOMBINATION;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddInvalidNaturalKeywordsCombinationFromBy)
		{
			string input = "testing adding with invalid keywords combination from 16/10/14 1414 by 2111";
			string expected = INPUTERROR_INVALIDNATURALKEYWORDSCOMBINATION;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalStartLaterThanEndTimeOnFromTo)
		{
			string input = "testing adding with start later than end time on 14/02/14 from 1800 to 1400";
			string expected = INPUTERROR_STARTLATERTHANENDTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalStartLaterThanEndTimeFromTo)
		{
			string input = "testing adding with start later than end time from 14/02/14 1800 to 13/02/14 2000";
			string expected = INPUTERROR_STARTLATERTHANENDTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalMissingStartTimeOnFromTo)
		{
			string input = "testing adding with missing start time on 09/11/14 to 1222";
			string expected = INPUTERROR_MISSINGSTARTTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalMissingStartTimeFromTo)
		{
			string input = "testing adding with missing start time to 25/12/14 0222";
			string expected = INPUTERROR_MISSINGSTARTTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalMissingEndTimeOnFromTo)
		{
			string input = "testing adding with missing end time on 01/01/14 from 1111";
			string expected = INPUTERROR_MISSINGENDTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}

		TEST_METHOD(AddNaturalMissingEndTimeFromTo)
		{
			string input = "testing adding with missing end time from 07/07/17 1717";
			string expected = INPUTERROR_MISSINGENDTIME;
			string feedback = "";

			string todoFileName = "testingTodo.txt";
			string doneFileName = "testingDone.txt";
			Manipulator* todoTMPtr;
			todoTMPtr = new TextManipulatorStub(todoFileName);
			Manipulator* doneTMPtr;
			doneTMPtr = new TextManipulatorStub(doneFileName);
			Add a(todoTMPtr, doneTMPtr);

			try {
				feedback = a.executeInput(input);
			} catch(exception& exception) {
				feedback = exception.what();
			}

			Assert::AreEqual(expected, feedback);

			vector<Task> todoTaskVector;
			todoTaskVector = todoTMPtr->read();

			Assert::AreEqual((unsigned int)18, todoTaskVector.size());
			Assert::AreEqual((string)"[F]\tBuy flowers for valentine's day\t-\t-\tClementi MRT florist", todoTaskVector[0].prepareLine());
			Assert::AreEqual((string)"[F]\tLearn guitar\t-\t-\t-", todoTaskVector[1].prepareLine());
			Assert::AreEqual((string)"[F]\tBring parents to Madives\t-\t-\t-", todoTaskVector[2].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t10/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[3].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t11/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[4].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t12/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[5].prepareLine());
			Assert::AreEqual((string)"[T]\tWorking part time\t13/02/14 0800\t13/02/14 1200\tGoogle Inc", todoTaskVector[6].prepareLine());
			Assert::AreEqual((string)"[D]\tComplete Time Dilation Project\t-\t13/02/14 1200\t-", todoTaskVector[7].prepareLine());
			Assert::AreEqual((string)"[T]\tHair cut for Vday\t13/02/14 1500\t13/02/14 1700\tCubby House", todoTaskVector[8].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with Ex before Vday\t13/02/14 1900\t13/02/14 2300\tHotel Rendezous", todoTaskVector[9].prepareLine());
			Assert::AreEqual((string)"[D]\tOrder Lambogini for valentine\t-\t14/02/14 0000\tLamborghini showroom - 30 Tebans Gardens Crescent S(608927)", todoTaskVector[10].prepareLine());
			Assert::AreEqual((string)"[T]\tPacify wife\t14/02/14 0800\t14/02/14 1000\tin-law's place", todoTaskVector[11].prepareLine());
			Assert::AreEqual((string)"[P]\tMeet up with Gf till dunno what time\t14/02/14 1700\t-\tConcord Hotel", todoTaskVector[12].prepareLine());
			Assert::AreEqual((string)"[P]\tStart Revising for Exams\t15/02/14 0800\t-\t-", todoTaskVector[13].prepareLine());
			Assert::AreEqual((string)"[T]\tDo Time Dilation Project whenever I am free\t15/02/14 0800\t16/02/14 2359\t-", todoTaskVector[14].prepareLine());
			Assert::AreEqual((string)"[T]\tMeet up with friends for dinner\t15/02/14 1700\t15/02/14 2100\tEverything with Fries", todoTaskVector[15].prepareLine());
			Assert::AreEqual((string)"[T]\tPARTY!!! TIME TO LET YOUR HAIR LOOSE\t15/02/14 2300\t16/02/14 0400\tZouk", todoTaskVector[16].prepareLine());
			Assert::AreEqual((string)"[P]\tTime to sleep\t16/02/14 0600\t-\t-", todoTaskVector[17].prepareLine());

			delete todoTMPtr;
			delete doneTMPtr;
		}
	};
}